package avicit.cbb.techclass.elefileupdown.service;

import avicit.platform6.modules.system.sysfileupload.domain.SysFileUpload;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Map;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：孟飞</p>
 * <p>邮箱：mengf@avicit.com</p>
 * <p>创建时间： 2014-10-21 上午9:04:50 </p>
 * <p>类说明：附件上传下载接口</p>
 * <p>修改记录： </p>
 */
public interface FileUploadEvent {

	/**
	 * 存到数据库之后的后处理
	 * @author 孟飞 
	 * @param sysFileUpload void
	 * @throws
	 */
	public void afterSaveFileByDB(SysFileUpload sysFileUpload);

	/**
	 * 存到服务器磁盘目录的后处理
	 * @author 孟飞 
	 * @param sysFileUpload
	 * @throws
	 */
	public void afterSaveFileByDisk(SysFileUpload sysFileUpload);
	
	
	/**
	 * 存储到fastdfs服务器的后处理
	 * @param sysFileUpload
	 * @throws
	 */
	public void afterSaveFileByFastdfs(SysFileUpload sysFileUpload);

	/**
	 * 存到MongoDB服务器的后处理
	 * @author 孟飞 
	 * @param sysFileUpload
	 * @param inputStream
	 * @param mongoId
	 * @param secretLevel void
	 * @throws
	 */
	public void afterSaveFileByOther(SysFileUpload sysFileUpload,
                                     InputStream inputStream, String mongoId, String secretLevel) throws Exception;
	
	/**
	 * 存到数据库之后的后处理
	 * @author 孟飞 
	 * @param sysFileUpload void
	 * @throws
	 */
	public void afterSaveFileByDB(SysFileUpload sysFileUpload, Map<String, Object> param);

	/**
	 * 存到服务器磁盘目录的后处理
	 * @author 孟飞 
	 * @param sysFileUpload
	 * @throws
	 */
	public void afterSaveFileByDisk(SysFileUpload sysFileUpload, Map<String, Object> param);
	
	
	/**
	 * 存储到fastdfs服务器的后处理
	 * @param sysFileUpload
	 * @throws
	 */
	public void afterSaveFileByFastdfs(SysFileUpload sysFileUpload, Map<String, Object> param);

	/**
	 * 存到MongoDB服务器的后处理
	 * @author 孟飞 
	 * @param sysFileUpload
	 * @param inputStream
	 * @param mongoId
	 * @param secretLevel void
	 * @throws
	 */
	public void afterSaveFileByOther(SysFileUpload sysFileUpload,
                                     InputStream inputStream, String mongoId, String secretLevel, Map<String, Object> param) throws Exception;
	
	/**
	 * 存到MongoDB服务器的后处理
	 * @author 孟飞 
	 * @param sysFileUpload
	 * @param inputStream
	 * @param mongoId
	 * @param secretLevel void
	 * @throws
	 */
	public void afterSaveFileByOther(SysFileUpload sysFileUpload,
                                     InputStream inputStream, String mongoId, String secretLevel, String collectionName);

	/**
	 * 删除数据库附件之后的后处理
	 * @author 孟飞 
	 * @param sysFileUpload void
	 * @throws
	 */
	public void afterDelFileByDB(SysFileUpload sysFileUpload);

	/**
	 * 删除服务器磁盘目录附件的后处理
	 * @author 孟飞 
	 * @param sysFileUpload void
	 * @throws
	 */
	public void afterDelFileByDisk(SysFileUpload sysFileUpload);
	
	/**
	 * 删除fastdfs服务器附件的后处理
	 * @author
	 * @param sysFileUpload void
	 * @throws
	 */
	public void afterDelFileByFastdfs(SysFileUpload sysFileUpload);

	/**
	 * 删除其MongoDB服务器中附件的后处理
	 * @author 孟飞 
	 * @param sysFileUpload
	 * @param mongoId void
	 * @throws
	 */
	public void afterDelFileByOther(SysFileUpload sysFileUpload, String mongoId);
	
	/**
	 * 删除AmazonS3服务器中附件的后处理
	 * @param sysFileUpload
	 * @param mongoId 
	 * @throws
	 */
	public void afterDelFileByAmazonS3(SysFileUpload sysFileUpload, Map<String, Object> param);
	
	/**
	 * 使用AmazonS3下载单个附件
	 * @param request
	 * @param response
	 * @param mongoId 
	 * @throws
	 */
	public void downloadOneFileByAmazonS3(HttpServletRequest request, HttpServletResponse response, Map<String, Object> param);
	
	/**
	 * 使用MongoDB下载单个附件
	 * @author 孟飞 
	 * @param request
	 * @param response
	 * @param mongoId void
	 * @throws
	 */
	public void downloadOneFileByOther(HttpServletRequest request, HttpServletResponse response, String mongoId);

	/**
	 * 根据附件id从mogodb下载单个附件
	 * @MethodName: downloadOneFileByAttachId
	 * @param request
 	* @param response
	 * @param mongoId
	 * @param attachId
	 * @Return: void
	 * @Author: 无量
	 * @Date: 2019/10/18 17:39
	 */
	public void downloadOneFileByAttachId(HttpServletRequest request, HttpServletResponse response, String mongoId, String attachId);
	
	/**
	 * 使用MongoDB下载单个附件（根据model）
	 * @author 孟飞 
	 * @param request
	 * @param response
	 * @param mongoId
	 * @param modelName void
	 * @throws
	 */
	public void downloadOneFileByOther(String fileId, String mongoId, String modelName, HttpServletResponse response);
	
	/**
	 * 使用MongoDB下载全部附件
	 * @author 孟飞 
	 * @param request
	 * @param response void
	 * @throws
	 */
	public void downloadAllFileByOther(HttpServletRequest request, HttpServletResponse response);
	
	/**
	 * 修改附件密级(mongodb修改附件密级)
	 * @author 孟飞 
	 * @param oldFileMap
	 * @param mongoId void
	 * @throws
	 */
	public void updateAttachSecret(Map<String, String> oldFileMap, String mongoId);
	
	/**
	 * 修改附件密级(非mongodb修改附件密级)
	 * @param oldFileMap
	 * @throws
	 */
	public void updateAttachSecretLevel(Map<String, String> oldFileMap);
	
	/**
	 * 使用MongoDB下载单个附件(转换后)
	 * @param request
	 * @param response
	 * @param mongoId 
	 * @throws
	 */
	public void downloadOneFileByOtherForConvert(HttpServletRequest request, HttpServletResponse response, String mongoId, String fileId, String fileName);
}
